import { observable, computed } from 'mobx';
import { PrintList } from '@/type';

export default class App {
    // 程序名称
    @observable appName = '';

    // 程序缓存地址
    @observable appCacheDir = {
        loading: false,
        result: {
            basic: '', // 根目录缓存地址
            download: '', // 下载缓存地址
            logs: '', // 日志缓存地址
            transform: '' // 文件转换缓存地址
        }
    };

    // 支持打印的文件类型
    @observable supportPrintFileType: {
        loading: boolean;
        result: Array<string>;
    } = {
        loading: false,
        result: []
    };

    // 打印机打印服务SDK状态
    @observable awaken = {
        loading: true, // 是否正在唤醒应用程序
        status: false // 应用程序的唤醒状态
    };

    // 打印机列表值
    @observable printerList: { loading: boolean; result: PrintList } = {
        loading: false, // 打印机列表获取状态
        result: [] // 打印机列表获取值
    };

    // 打印机工作中状态
    @observable printingOption: { loading: boolean; files: Array<unknown> } = {
        loading: false, // 是否正在打印文件
        files: [] // 正在打印的文件
    };

    // 清除程序缓存过程中
    @observable cleanCacheOption = {
        loading: false // 是否正在清除缓存
    };

    // 获取默认打印机
    @computed
    public get defaultPrinter() {
        if (!this.printerList.result.length) return '';
        const defaultPrint = this.printerList.result.find(
            (item) => item.default
        );
        return defaultPrint?.value;
    }

    // 打印机是否唤醒失败
    @computed
    public get isAwakenFail() {
        return !this.awaken.status && !this.awaken.loading;
    }

    // loading 程序按钮状态及文字
    @computed
    public get loadingTextOption() {
        const printerLoading = this.printerList.loading,
            printingLoading = this.printingOption.loading,
            awakenLoading = this.awaken.loading;

        if (this.isAwakenFail) return { loading: true, text: '唤醒失败' };
        if (!printerLoading && !printingLoading && !awakenLoading) {
            return { loading: false, text: '' };
        }

        if (printingLoading) {
            return {
                loading: true,
                text: '正在打印文件中...'
            };
        } else if (printerLoading) {
            return {
                loading: true,
                text: '正在搜索打印中...'
            };
        } else if (awakenLoading) {
            return {
                loading: true,
                text: '唤醒打印服务中'
            };
        } else {
            return {
                loading: true,
                text: ''
            };
        }
    }
}
